home *** CD-ROM | disk | FTP | other *** search
/ Saar AMOK 2 / Saar AMOK II - Oktober 1994 (1994)(Kreativ Marketing)(DE)[!][I-7598].iso / disks / 651_700 / 657 / splitter / splitter.c < prev    next >
C/C++ Source or Header  |  1993-10-29  |  4KB  |  154 lines

  1. /*
  2.  *  Splitter
  3.  *
  4.  *  A small program to split files in several protions with a defined
  5.  *  size or number and join them together again.
  6.  *
  7.  *  Version 1.0 on 18-Oct-1993   Fully reliable version.
  8.  *  Version 1.1 on 18-Oct-1993   Replaced fclose()/fopen() by rewind().
  9.  *
  10.  *
  11.  *  Usage: Splitter <file> [-j] [-p n] [-s n]
  12.  *
  13.  *   -f    the file to split
  14.  *   -j    join, not split
  15.  *   -p    how much portions to make
  16.  *   -s    how large to make each portion
  17.  *
  18.  *
  19.  *  DISCLAIMER: As usual, I can't take any responsibility for anything
  20.  *              that might happen to you or your computer when you use
  21.  *              this program.
  22.  *
  23.  *  This is freeware, i.e. you may give this program to anyone you like
  24.  *  and upload it to any mailbox, bulletin board or software server as
  25.  *  long as you leave this file as it is. If you have suggestions on how
  26.  *  to advance the reliability or funtionality of this program, feel free
  27.  *  to do it (and, please, send it to me). But you may not use this code
  28.  *  for anything commercial.
  29.  *
  30.  */
  31.  
  32. #include <stdio.h>
  33. #include <string.h>
  34.  
  35. #define info "\nSplitter V1.0 on 10/18/1993\n(c)1993 by Martin Schlodder\n\nUsage: Splitter <file> [-j] [-p n] [-s n]\n -f  the file to split\n -j  join, not split\n -p  how much portions to make\n -s  how large to make each portion\n\nAddress:\n Martin Schlodder\n Uhlandstr. 18\n D 72336 Balingen\n\nInternet:\n schlodder@student.uni-tuebingen.de\n"
  36. #define nofile "Please give me a file to work on."
  37. #define noarg "Choose one of -p or -s to select either the number of portions to\nbuild or the maximum size of each portion."
  38. #define errinarg "Give an option in the form of '-p 7' or '-s880000'."
  39. #define wrongfile "Couldn't open file."
  40. #define wrongarg "This option is not known to Splitter"
  41. #define nooutfile "Couldn't open output file!"
  42.  
  43. main(int argc,char **argv){
  44.   char *version="$VER: Splitter 1.1 (18.10.93)   ©1993 by Martin Schlodder";
  45.   FILE *sfh=NULL,*dfh=NULL;
  46.   char *name,ext[257];
  47.   char sfile[257],dfile[257];
  48.   int portions=0;
  49.   int size=0;
  50.   int totalsize,i,j;
  51.   char c;
  52.   switch(argc){
  53.   case 1:
  54.     puts(nofile);
  55.     exit(5);
  56.   case 2:
  57.     if(strchr(argv[1],'?')){
  58.       puts(info);
  59.       exit(0);
  60.     }
  61.     puts(noarg);
  62.     exit(5);
  63.   }
  64.   strcpy(sfile,argv[1]);
  65.   if(name=(char *)strrchr(argv[1],'.')){
  66.     strcpy(ext,name);
  67.     *name=0;
  68.   }
  69.   else
  70.     ext[0]=0;
  71.   name=argv[1];
  72.   if(argv[2][0]!='-'){
  73.     puts(noarg);
  74.     exit(5);
  75.   }
  76.   if(argv[2][1]!='j'){
  77.     if(argv[2][2]!=0){
  78.       if(0>sscanf(&(argv[2][2]),"%d",&i)){
  79.     puts(errinarg);
  80.     exit(5);
  81.       }
  82.     }
  83.     else
  84.       if(0>sscanf(argv[3],"%d",&i)){
  85.     puts(errinarg);
  86.     exit(5);
  87.       }
  88.     switch(argv[2][1]){
  89.     case 'p':
  90.       portions=i;
  91.       break;
  92.     case 's':
  93.       size=i;
  94.       break;
  95.     default:
  96.       puts(wrongarg);
  97.       exit(5);
  98.     }
  99.     if(!(sfh=fopen(sfile,"rb"))){
  100.       puts(wrongfile);
  101.       exit(5);
  102.     }
  103.     for(i=0;fgetc(sfh)!=EOF;++i);
  104.     totalsize=i;
  105.     if(portions)
  106.       size=(totalsize+portions)/portions;
  107.     else
  108.       portions=(totalsize+size)/size;
  109.     rewind(sfh);
  110.     for(i=1;i<portions;++i,totalsize-=size){
  111.       sprintf(dfile,"%s_%d%s",name,i,ext);
  112.       if(!(dfh=fopen(dfile,"wb"))){
  113.     fclose(sfh);
  114.     puts(nooutfile);
  115.     exit(20);
  116.       }
  117.       for(j=0;j<size;++j)
  118.     fputc(fgetc(sfh),dfh);
  119.       fclose(dfh);
  120.     }
  121.     sprintf(dfile,"%s_%d%s",name,i,ext);
  122.     if(!(dfh=fopen(dfile,"wb"))){
  123.       fclose(sfh);
  124.       puts(nooutfile);
  125.       exit(20);
  126.     }
  127.     for(j=0;j<totalsize;++j)
  128.       fputc(fgetc(sfh),dfh);
  129.     fclose(dfh);
  130.     fclose(sfh);
  131.     printf("File %s splitted in %d portions with %d bytes each.\n",sfile,portions,size);
  132.   }
  133.   else{
  134.     printf("Joining ");
  135.     if(!(sfh=fopen(sfile,"rw"))){
  136.       puts(nooutfile);
  137.       exit(20);
  138.     }
  139.     for(i=1;;++i){
  140.       sprintf(dfile,"%s_%d%s",name,i,ext);
  141.       if(!(dfh=fopen(dfile,"rb")))
  142.     break;
  143.       for(size=0;fgetc(dfh)!=EOF;++size);
  144.       rewind(dfh);
  145.       for(j=0;j<size;++j)
  146.     fputc(fgetc(dfh),sfh);
  147.       fclose(dfh);
  148.       printf("%s ",dfile);
  149.     }
  150.     fclose(sfh);
  151.     printf("to %s.\n",sfile);
  152.   }
  153. }
  154.